SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO
CREATE PROCEDURE [dbo].[paChequearRectificacionBajaDeServicio]
-- <DESCRIPCION> Realiza el chequeo de chequeo de rectificatoria de baja.
-- <CONSIDERACIONES ESPECIALES> 
-- <TABLAS> tb_ServiciosAgentes, tb_SubServiciosAgentes, tb_ColaDeMovimientos, tb_PlazasDeMovimiento
-- <PROCEDIMIENTOS> paChequearIncompatibilidadHoraria
-- <ACTUALIZACIONES> 08 - 04 - 2006 por OTERO, Javier (Se agrega el control de incompatibilidad)
-- <ACTUALIZACIONES> 08 - 07 - 2008 por OTERO, Marcelo y SANES, Jorge (Se cambio logica del PA y el control de incompatibilidad)

---- ACTUALIZADO EN DB
-- 12/04/2006 - SANES, Jorge
-- 29/07/2008   -  OTERO, Marcelo y SANES, Jorge

@idCola int,
@Estado INT OUTPUT,
@Diagnostico VARCHAR(1000) OUTPUT
AS
SET NOCOUNT ON
DECLARE @Fecha1 DATETIME
DECLARE @Fecha2 DATETIME
DECLARE @idPlaza INT
DECLARE @SubServicio INT
DECLARE @TipoDePaquete INT
DECLARE @fechabaja DATETIME
DECLARE @fechaalta DATETIME
DECLARE @causabaja INT
DECLARE @plazadisponibilidad INT
DECLARE @cod INT
DECLARE @FAltaPlaza DATETIME
DECLARE @FBajaPlaza DATETIME
DECLARE @Destino INT
DECLARE @Baja VARCHAR(1)
DECLARE @error INT
-- Para almacenar el modo del usuario.
DECLARE @Modo INT
DECLARE @Deshacer VARCHAR(1)
DECLARE @FechaBajaServicio DATETIME
DECLARE @Servicio INT
DECLARE @Agente INT
-- Declarar Variables para Nuevo Control de Incompatibilidad
DECLARE @IncompatibleChk INT 
DECLARE @EstadoChk INT 
DECLARE  @DiagnosticoChk VARCHAR(200)
DECLARE @CausaAlta INT 
DECLARE @CausaAltaChequeaIncompatibilidad  VARCHAR(1)
DECLARE @FechaAltaServicioRect DATETIME

-- INICIALIZAR VARIABLES
SET @IncompatibleChk = 0 
SET @EstadoChk = 0 
SET @DiagnosticoChk = ''
SET @CausaAlta = 0 
SET @CausaAltaChequeaIncompatibilidad = 'N'

SELECT @Modo = Modo FROM tb_Usuarios WHERE NTUser = SYSTEM_USER


-- Variable para retornar el diagnostico del check
--declare @diagnostico varchar(1000)
SELECT @Diagnostico = ''
SELECT @error = 0
SELECT @cod = 0


SELECT @idPlaza = idPlaza, @SubServicio = Servicio, @PlazaDisponibilidad = PlazaDestino, @CausaBaja = CausaBaja, @Deshacer = Borrar FROM tb_PlazasDeMovimiento WHERE idCola = @idCola

SELECT @FechaAlta = FechaAlta, @FechaBajaServicio = FechaBaja, @Servicio = ServicioAgente FROM tb_SubServiciosAgentes WHERE idSubServicio = @SubServicio

SELECT @FechaBaja = Fecha2 from tb_ColaDeMovimientos WHERE idCola = @idCola

SELECT @Agente = Agente, @CausaAlta = CausaAlta, @FechaAltaServicioRect = FechaAlta  FROM tb_ServiciosAgentes WHERE IdServicioAgente = @Servicio

IF @Deshacer IS NULL
	SELECT @Deshacer = 'N'


IF @FechaBaja < @FechaAlta 
BEGIN
   SELECT  @Diagnostico = @Diagnostico+'*'+'La fecha de Baja es inferior a la fecha de alta del Ultimo SubServicio!...'
   SELECT @Cod = 3
   GOTO Salir
END

IF @PlazaDisponibilidad IS NULL AND @CausaBaja = 8
BEGIN
  SELECT  @Diagnostico=@Diagnostico+'*'+'Cuando la causa de baja es PASE A DISPONIBILIDAD debe seleccioar una PLAZA DESTINO con division = N'
  SELECT @Cod = 3
  GOTO Salir
END

IF @PlazaDisponibilidad is not null and @CausaBaja = 8 and ltrim(rtrim((Select d.division from tb_Divisiones d, tb_Plazas p where idDivision = p.division and idPlaza = @PlazaDisponibilidad))) <> 'N'
BEGIN
   SELECT @Diagnostico=@Diagnostico+'*'+'La Division de la Plaza Destino debe tener division = N.  Si no existe la plaza deberia crearla'	
   SELECT @Cod = 3
   GOTO Salir

END

-- Control de Incompatibilidad (agregado el 09 - 04 - 2006)
-- Buscar por la Causa de Alta para ver si Chequea InCompatibilidad 
SELECT @CausaAltaChequeaIncompatibilidad = ChequeaInCompatibilidad FROM Tb_CausasAltas WHERE IdCausaAlta =  @CausaAlta

-- Si se deshace la Licencia o bien se rectifica la Fecha de Baja
IF @CausaAltaChequeaIncompatibilidad = 'S'  AND ( (@Deshacer = 'S') OR (@FechaBaja <> @FechaBajaServicio))
BEGIN
	DECLARE @HorasMediaIniciales INT, @HorasTerciariasIniciales INT, @HorasCargoIniciales INT, @Horas131 INT
	DECLARE @EsIncompatible BIT, @Horas INT, @HorasTerciarias INT
	DECLARE @Fecha DATETIME
	SELECT @HorasMediaIniciales = 0, @HorasTerciariasIniciales = 0, @HorasCargoIniciales = 0,  @Horas131 = 0


	-- Si la causa de alta del Servicio no es por  125c.
	IF NOT EXISTS(SELECT IdServicioAgente FROM tb_ServiciosAgentes WHERE IdServicioAgente = @Servicio AND CausaAlta = 18)
		SELECT @HorasMediaIniciales = CASE WHEN C.RegimenSalarial = 13 AND CargoSalarial <> 4001 AND  S.CausaAlta <> 12 THEN S.Horas ELSE 0 END,
			 @HorasTerciariasIniciales = CASE WHEN C.RegimenSalarial = 13 AND S.CargoSalarial = 4001 AND  S.CausaAlta <> 12 THEN S.Horas 
							   WHEN C.RegimenSalarial = 12 AND C.Escalafon = 24 AND  S.CausaAlta <> 12 THEN C.EquivHoraria ELSE 0 END,
			 @HorasCargoIniciales = CASE WHEN C.RegimenSalarial = 12 AND C.Escalafon <> 24  AND  S.CausaAlta <> 12 THEN C.EquivHoraria ELSE 0 END,
			@Horas131 = CASE WHEN S.CausaAlta = 12 THEN  S.Horas ELSE 0 END
		FROM tb_ServiciosAgentes S INNER JOIN tb_CargosSalariales C ON C.IdCargo = S.CargoSalarial
		WHERE IdServicioAgente = @Servicio

	IF @Deshacer = 'S'
		SELECT @Fecha = DATEADD(DAY,120,GETDATE())
	ELSE

		SELECT @Fecha = DATEADD(DAY, -1, @FechaBaja) -- 11/12/2008 - Se le resta un dia para el control de incompatibilidad solo estaba @FechaBaja


	EXEC paChequearIncompatibilidadHorariaV3  'BR', @CausaAlta, @Agente, @HorasMediaIniciales, @HorasCargoIniciales, @HorasTerciariasIniciales,  @Horas131, @FechaAltaServicioRect, @Fecha, @Servicio, @IncompatibleChk OUTPUT, @EstadoChk OUTPUT, @DiagnosticoChk OUTPUT

	IF @IncompatibleChk <> 0
		BEGIN 
			---- Un aviso o Imcompatible Total
			SET @Cod = @EstadoChk
			SET  @Diagnostico = @Diagnostico+'*'+@DiagnosticoChk
		END

END



UPDATE tb_ColaDeMovimientos SET estado = @cod,
ChequeoEscuela = CASE WHEN @Modo = 2 THEN @Diagnostico ELSE ChequeoEscuela END
WHERE idCola = @idCola

Salir:
SET @Estado = @Cod
GO
GRANT EXECUTE ON  [dbo].[paChequearRectificacionBajaDeServicio] TO [CentroDeDesignaciones]
GRANT EXECUTE ON  [dbo].[paChequearRectificacionBajaDeServicio] TO [GestionInstitucional]
GRANT EXECUTE ON  [dbo].[paChequearRectificacionBajaDeServicio] TO [PersonalDocente]
GO
